package u1;

import static java.lang.System.*;

import java.io.IOException;
import java.util.HashMap;

import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLStreamException;

import org.xml.sax.SAXException;

/**
 * Takes uncompressed enwiki XML dump on stdin and prints every "step"th page
 * starting with the "first" page and not past the "last" page. The output
 * format is compatible with the PageReader, but it is not identically the
 * same as the wiki dump. The output is not compressed.
 */
public class Slice {
  @SuppressWarnings("serial")
  public static void main(final String[] argv) throws SAXException, IOException, XMLStreamException, FactoryConfigurationError {
    if (argv.length != 3) {
      err.println("USAGE: first step last");
      exit(-1);
    }
    
    final String firstString = argv[0];
    final String stepString = argv[1];
    final String lastString = argv[2];
   
    final PageWriter writer = new PageWriter(out, "slice",
        new HashMap<String, String>() {
      {
        put("first", firstString);
        put("step", stepString);
        put("last", lastString);
      }
    });

    new PageReader() {
      
      private int current = Integer.parseInt(firstString);
      private int step = Integer.parseInt(stepString);
      private int last = Integer.parseInt(lastString);

      @Override
      protected void readPage(String title, String text) {
        if (current < last && current % step == 0) {
          writer.writePage(title, text);
        }
        ++current;
      }
      
    }.parse(in);
    
    writer.close();
  }
}
/*
* Copyright (c) 2009 John Lees-Miller
* 
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* 
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/

